﻿using System;
using System.Collections.Generic;
using BusinessObjects.Report;
using BusinessObjects.Report.Voucher;

namespace DataObjects.StandartInterfaces.Report
{

    /// <summary>
    /// Defines methods to access Report List
    /// </summary>
    /// <remarks>
    /// This is a database-independent interface. Implementations are database specific
    /// </remarks>
    public interface IReportListDao
    {
        /// <summary>
        /// Gets the report lists.
        /// </summary>
        /// <returns></returns>
        List<ReportList> GetReportLists();
        /// <summary>
        /// Gets the accounts for combo tree.
        /// </summary>
        /// <param name="reportListId"> </param>
        /// <returns>List{AccountEntity}.</returns>
        List<ReportList> GetReportListsForComboTree(long reportListId);
        /// <summary>
        /// Gets the report list.
        /// </summary>
        /// <param name="reportListId">The report list identifier.</param>
        /// <returns></returns>
        ReportList GetReportList(long reportListId);

        /// <summary>
        /// Gets the paged.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <param name="currentPage">The current page.</param>
        /// <returns></returns>
        List<ReportList> GetPaged(int unitId, int currentPage);

        /// <summary>
        /// Gets the size of the page.
        /// </summary>
        /// <param name="unitId">The unit identifier.</param>
        /// <returns></returns>
        int GetPageSize(int unitId);

        /// <summary>
        /// Gets the report lists.
        /// </summary>
        /// <returns></returns>
        List<ReportList> GetReportLists(int type);

        /// <summary>
        /// Inserts the report list.
        /// </summary>
        /// <param name="reportList">The report list.</param>
        string InsertReportList(ReportList reportList);

        /// <summary>
        /// Updates the report list.
        /// </summary>
        /// <param name="reportList">The report list.</param>
        string UpdateReportList(ReportList reportList);

        /// <summary>
        /// Deletes the report list.
        /// </summary>
        /// <param name="reportList">The report list.</param>
        string DeleteReportList(ReportList reportList);

        List<StockBacklogEntity> GetReportStockBacklog(DateTime fromDate, DateTime toDate, string stockId);
    }
}
